using UnityEngine;

namespace  QFramework.Example
{
    // 2.定义一个架构（提供 MVC、分层、模块管理等）
    public class CounterApp : Architecture<CounterApp>
    {
        /// <summary>
        // 需要注册的组件 (System、Model、Utility)：
        // 具有较长的生命周期，通常伴随整个应用程序运行
        //     需要框架统一管理其创建、初始化和销毁
        //     通过 RegisterSystem、RegisterModel、RegisterUtility 方法注册到架构中
        // 不需要注册的组件 (Controller、Command)：
        // Controller 通常是 Unity 的 MonoBehaviour 组件，由 Unity 引擎管理生命周期
        //     Command 是临时对象，每次执行时动态创建和销毁
        // 这种设计体现了 QFramework 的分层思想：
        // 核心服务组件（System/Model/Utility）由架构中心化管理
        //     临时操作组件（Command）和视图组件（Controller）按需创建使用
        /// </summary>
        protected override void Init()
        {
            // 注册 System 
            // this.RegisterSystem(new AchievementSystem()); // +
            // 泛型注册后，可以通过接口类型获取
            this.RegisterSystem<IAchievementSystem>(new AchievementSystem());

            // 注册 Model
            // this.RegisterModel(new CounterAppModel());
            this.RegisterModel<ICounterAppModel>(new CounterAppModel());

            // 注册存储工具的对象
            // this.RegisterUtility(new Storage());
            this.RegisterUtility<IStorage>(new Storage());
        }
        
        /// <summary>
        /// 拦截所有 Command,处理各种各样的日志
        /// </summary>
        /// <param name="command"></param>
        protected override void ExecuteCommand(ICommand command)
        {
            Debug.Log("Before " + command.GetType().Name + "Execute");
            base.ExecuteCommand(command);
            Debug.Log("After " + command.GetType().Name + "Execute");
        }
    }
}